[Talend]ジョブのJVM設定をして文字化けを防ぐ
はじめに
こんにちは。DI部の大高です。
今回はTalendのジョブのJVM設定をして文字化けを防ぐ方法をご紹介したいと思います。
前提条件
Talendのバージョンは「Talend Open Studio for Big Data」の「Version 7.1.1」で検証しています。また、実行環境は「Windows 10」となります。
なにが問題となるのか
まずは、以下のジョブをご覧ください。
1つ目のジョブは、単純に「tJava」で標準出力に日本語を出力しているジョブです。また、より分かりやすくするために「System.getProperty("file.encoding")」も出力しています。
System.out.println("file.encoding: " + System.getProperty("file.encoding")); System.out.println("こんにちは");
このジョブを実行すると以下のとおりになります。
[statistics] connecting to socket on port 3393 [statistics] connected file.encoding: UTF-8 こんにちは [statistics] disconnected
つぎに2つ目のジョブです。こちらでは、「tSystem」コンポーネントを利用して先程のジョブをエクスポートしたもの(JobJVMEnv_run.bat)を呼び出して、結果の「標準出力」を「tJava」で出力しています。
このジョブの実行結果は以下のとおりです。
[statistics] connecting to socket on port 4042 [statistics] connected C:\opt\Talend\TOS\BD\7.1.1\workspace\SANDBOX\poms\jobs\process\Misc\jobcaller_0.1\src\main\ext-resources>C: C:\opt\Talend\TOS\BD\7.1.1\workspace\SANDBOX\poms\jobs\process\Misc\jobcaller_0.1\src\main\ext-resources>cd C:\tmp\Sandbox\Misc\Job-JVM-Env\JobJVMEnv_0.1\JobJVMEnv\ C:\tmp\Sandbox\Misc\Job-JVM-Env\JobJVMEnv_0.1\JobJVMEnv>java -Dtalend.component.manager.m2.repository=C:\tmp\Sandbox\Misc\Job-JVM-Env\JobJVMEnv_0.1\JobJVMEnv/../lib -Xms256M -Xmx1024M -cp .;../lib/routines.jar;../lib/dom4j-1.6.1.jar;../lib/log4j-1.2.17.jar;jobjvmenv_0_1.jar; sandbox.jobjvmenv_0_1.JobJVMEnv --context=Default file.encoding: MS932 ����ɂ��� [statistics] disconnected
「file.encoding」が「MS932」となっているため、文字化けが発生しています。これは「file.encoding」が明示的に「UTF-8」に設定されていないために発生しているので、以下で設定方法を説明します。
ジョブのJVMの設定
ジョブのJVM設定は、ジョブを開いたあとに「実行」タブの「詳細設定」から設定することが可能です。設定を追加するには「特定のJVM引数の使用」を有効にして、「新規...」をクリックします。
追加したいJVM引数(今回は「-Dfile.encoding=UTF-8」)を記述して「OK」をクリックします。
すると、JVM引数が追加されたことが確認できます。
このJVM引数はジョブをエクスポートした時にも設定されるので、結果としてこの設定でエクスポートすれば文字化けが発生しないことになります。
また、JVM設定は個別のジョブに設定可能ですがワークスペースで共通して設定することも可能です。
メニューの「ウィンドウ > Preferences」から「Talend > 実行/デバッグ」を開きます。ここの「ジョブ実行VMの引数」で先程と同様に設定することが可能です。
設定すると、ジョブ側には共通JVM設定が自動で設定されていることが確認できます。
設定後のジョブ実行結果
上記のようにJVM引数を設定した上でジョブをエクスポートし、「tSystem」から呼び出すようにします。
先程のジョブを実行すると、以下のような実行結果となります。
[statistics] connecting to socket on port 4023 [statistics] connected C:\opt\Talend\TOS\BD\7.1.1\workspace\SANDBOX\poms\jobs\process\Misc\jobcaller_0.1\src\main\ext-resources>C: C:\opt\Talend\TOS\BD\7.1.1\workspace\SANDBOX\poms\jobs\process\Misc\jobcaller_0.1\src\main\ext-resources>cd C:\tmp\Sandbox\Misc\Job-JVM-Env\JobJVMEnv_0.1\JobJVMEnv\ C:\tmp\Sandbox\Misc\Job-JVM-Env\JobJVMEnv_0.1\JobJVMEnv>java -Dtalend.component.manager.m2.repository=C:\tmp\Sandbox\Misc\Job-JVM-Env\JobJVMEnv_0.1\JobJVMEnv/../lib -Xms256M -Xmx1024M -Dfile.encoding=UTF-8 -cp .;../lib/routines.jar;../lib/dom4j-1.6.1.jar;../lib/log4j-1.2.17.jar;jobjvmenv_0_1.jar; sandbox.jobjvmenv_0_1.JobJVMEnv --context=Default file.encoding: UTF-8 こんにちは [statistics] disconnected
文字化けがなおりました!また、JVM引数として「-Dfile.encoding=UTF-8」が設定されていることも確認できます。
まとめ
以上、ジョブのJVM設定をして文字化けを防ぐ方法のご紹介でした。個人的にとても悩まされていたので、どなたかの参考になれば幸いです。
それでは。